from enum import Enum
from typing import override

from .path import Path

# 路径规则需要遵循 URI 标准，便于直接生成 HTTP 访问链接
# / 开头的绝对路径
# 或者非 / 开头，以用户名开头的表示用户空间的路径
# / 开头代表本机的 hfs 路径体系
# 用户路径代表一种逻辑视图，对应实际的 hfs 路径
# TODO 如何使用户同时管理多机 hfs 路径？

class hfsPath(Path):
    def __init__(self, path: str):
        super().__init__(path)
        self.path = path
        self.pathSeparator = '/'
        self.is_userPath = False # 非 / 开头的为用户视图路径，第一个项目为用户名
        self.is_relative = False # 一般来说，hfs 路径只能显示指定相对路径，即定义第一项为 . 或 .. 
        self.pathList = self.calc_path_list()
        
        if self.pathList[0] == '':
            self.is_userPath = False
        if self.pathList[0] == '.' or self.pathList[0] == '..':
            self.is_relative = True


    @override
    @staticmethod
    def CheckParameterLegal(path: str) -> bool:
        # 联合物理卷信息，和用户卷信息进行检查
        # TODO 参考 URI 规则，不区分大小写，%进行转义等等
        test_ins = hfsPath(path)
        return True
    
    def calc_path_list(self) -> list[str]:
        return self.path.split(self.pathSeparator)
    
    def check_relative(self) -> bool:
        # 检查路径是否是相对路径
        return self.is_relative


    def get_parent_path(self) -> 'Path|None':
        # 获取父路径
        if len(self.pathList) == 2 and self.pathList[1] == '':
            return None
        else:
            return hfsPath(self.pathSeparator.join(self.pathList[:-1]))

    def get_path(self) -> str:
        # 获取路径字符串
        return self.path